﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using VentaPorCatalogos.UserControls;
using BE.SearchCriteria;
using BE;
using BLL;
using System.Text;
using VentaPorCatalogos.Models;

namespace VentaPorCatalogos.Pages
{
    public partial class CampañasArticulosSeleccionar : PageSearch
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ArticulosCampañaModel oArticulosCampañaModel = Session["Model"] as ArticulosCampañaModel;
                oArticulosCampañaModel.ArticulosAgregados = new List<ArticulosCampañaBE>();

                Session["SearchCriteria"] = null;
                InicializarGrilla();

                CargarRubros();

                if (!string.IsNullOrEmpty(Request["Filtro"]))
                {
                    AsignarFiltrosQueryString(txtIdFiltro, txtNombreFiltro, txtDescripcionFiltro, ddlRubro, ddlEstado);
                    btnFiltrar_Click(null, null);
                }
            }
        }

        private void InicializarGrilla()
        {
            gdvSearch.DataSource = new List<ArticuloBE>();
            gdvSearch.DataBind();
        }

        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            ArticuloSC wArticuloSC = new ArticuloSC();

            Int32 wIdArticulo;
            if (Int32.TryParse(txtIdFiltro.Text, out wIdArticulo))
                wArticuloSC.IdArticulo = wIdArticulo;
            wArticuloSC.Nombre = txtNombreFiltro.Text.Trim();
            wArticuloSC.Descripcion = txtDescripcionFiltro.Text.Trim();
            if (!string.IsNullOrEmpty(ddlRubro.SelectedValue))
                wArticuloSC.IdRubro = Convert.ToInt32(ddlRubro.SelectedValue);
            if (!string.IsNullOrEmpty(ddlEstado.SelectedValue))
                wArticuloSC.Activo = ddlEstado.SelectedValue == "1";
            Session["SearchCriteria"] = wArticuloSC;

            CargarGrilla(Selector.Actual, "ASC");
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            if (Session["Model"] == null)
                return;

            ArticulosCampañaModel oArticulosCampañaModel = Session["Model"] as ArticulosCampañaModel;
            
            var drArticulosSeleccionados = (from GridViewRow w in gdvSearch.Rows 
                                            where ((CheckBox)w.Cells[0].FindControl("ckbSeleccion")).Checked 
                                            select w);
            if (drArticulosSeleccionados.Count() == 0)
            {
                MostrarMensaje("Debe seleccionar al menos un elemento");
                return;
            }

            oArticulosCampañaModel.ArticulosAgregados = new List<ArticulosCampañaBE>();
            foreach (GridViewRow oRow in drArticulosSeleccionados)
            {
                int wIdArticulo = int.Parse(gdvSearch.DataKeys[oRow.RowIndex].Value.ToString());

                ArticulosCampañaBE oArticuloCampañaBE = new ArticulosCampañaBE();
                ArticuloBE oArticuloBE = ArticuloBLL.SeleccionarPorId(wIdArticulo);
                if (oArticuloBE != null)
                {
                    oArticuloCampañaBE.Articulo = oArticuloBE;
                    oArticuloCampañaBE.Pagina = string.Empty;
                    oArticuloCampañaBE.Precio = oArticuloBE.Precio;
                    oArticuloCampañaBE.IdCampaña = oArticulosCampañaModel.IdCampaña;
                    oArticulosCampañaModel.ArticulosAgregados.Add(oArticuloCampañaBE);
                }                
            }

            StringBuilder sbScript = new StringBuilder();
            sbScript.AppendLine(@"$(function () {");
            sbScript.AppendLine(string.Format("Seleccionar({0});", 1));
            sbScript.AppendLine(@"});");

            ScriptManager.RegisterStartupScript(this, this.GetType(), "closePage", sbScript.ToString(), true);

            
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            ClientScript.RegisterStartupScript(typeof(Page), "closePage", string.Format("Seleccionar({0});", 0), true);
        }

        protected void pagGrilla_OnComandoPagina(object sender, PaginadorEventArgs e)
        {
            CargarGrilla(e.Comando, "ASC");
        }

        protected override void Render(HtmlTextWriter writer)
        {
            foreach (GridViewRow r in gdvSearch.Rows)
            {
                if (r.RowType == DataControlRowType.DataRow)
                {
                    r.ToolTip = "Haga click para seleccionar";
                    //r.Attributes["onclick"] = this.Page.ClientScript.GetPostBackClientHyperlink(this.gdvSearch, "Select$" + r.RowIndex, true);

                }
            }

            base.Render(writer);
        }

        protected void CargarGrilla(Selector pnSelector, string pszOrden)
        {
            if (Session["Model"] == null)
                return;

            BaseSC wSearchCriteria;
            wSearchCriteria = (BaseSC)Session["SearchCriteria"];

            try
            {
                int wCountReg = 0;
                
                List<ArticuloBE> oListArticuloBE = ArticuloBLL.SeleccionarPorParametros(wSearchCriteria, 0, null, ref wCountReg);
 
                ArticulosCampañaModel oArticulosCampañaModel = Session["Model"] as ArticulosCampañaModel;
                foreach (ArticulosCampañaBE elemBE in oArticulosCampañaModel.listArticulosCampaña)
                {
                    ArticuloBE oExistente = oListArticuloBE.Find(x => x.IdArticulo == elemBE.Articulo.IdArticulo);
                    if (oExistente != null)
                        oListArticuloBE.Remove(oExistente);
                }
                wCountReg = oListArticuloBE.Count;

                gdvSearch.DataSource = oListArticuloBE;
                gdvSearch.DataBind();
            }
            finally
            {
                ;
            }


        }

        private void CargarRubros()
        {
            try
            {
                int wCountReg = 0;
                List<RubroBE> ListBE = new List<RubroBE>();
                ListBE = RubroBLL.SeleccionarTodos(null, 0, null, ref wCountReg);
                ddlRubro.DataSource = ListBE;
                ddlRubro.DataTextField = "Descripcion";
                ddlRubro.DataValueField = "IdRubro";
                ddlRubro.DataBind();

                ddlRubro.Items.Insert(0, new ListItem("Seleccione", string.Empty));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        protected void gdvSearch_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gdvSearch.PageIndex = e.NewPageIndex;
            gdvSearch.DataBind();
        }



    }
}